redis集群读写,容错切换,从属调整,扩容,缩容 您所在的位置:网站首页 redis 手动切换master redis集群读写,容错切换,从属调整,扩容,缩容

redis集群读写,容错切换,从属调整,扩容,缩容

2023-06-01 13:38| 来源: 网络整理| 查看: 265

rediscluster 读写一定要注意redis实例的区间实例范围。需要路由到位。 在这里插入图片描述 比如 在这里插入图片描述 hashsolt=hash(k1) mod 16384=12706,而12706槽位不在6391上,在6393上。

如何让rediscluster 路由到槽呢? redis-cli命令尾部加上 -c即可。防止路由失效。如果k1不在6391上,则自动路由到6393上。

查看某个key 属于对应的槽位值 cluster keysolt key

主从容错切换

1.rediscluster 某个主机宕机,其从机会立即上位。 2.当之前的宕机主机正常启动后,其会变为新主机的从机 3.再说一遍,集群不能保证数据的一致性(100%),一定有数据丢失的情况

手动节点从属调整

常用命令 cluster failover redis-cli 的从机将 与其主机调换角色。 该命令只能在群集slave节点执行,让slave节点进行一次人工故障切换。

人工故障切换是预期的操作,而非发生了真正的故障,目的是以一种安全的方式(数据无丢失)将当前master节点和其中一个slave节点(执行cluster-failover的节点)交换角色。 流程如下:

当前slave节点告知其master节点停止处理来自客户端的请求

master 节点将当前replication offset 回复给该slave节点

该slave节点在未同步至replication offset之前不做任何操作,以保证master传来的数据均被处理。

该slave 节点进行故障转移,从群集中大多数的master节点获取epoch,然后广播自己的最新配置

原master节点收到配置更新:解除客户端的访问阻塞,回复重定向信息,以便客户端可以和新master通信。

rediscluster 扩容

1.从新启动两个实例端分别为:6397,6398,此时他们都master 2.将新增的6397节点(空槽位)加入原集群

//命令 redis-cli -a 111111 --cluster add-node 127.0.0.1:6397 127.0.0.1:6391 // 127.0.0.1:6397就是将要作为master的主节点 // 6391相当于原来集群中的领路人。实际就是6387通过6381找到集群 //记住,这里6397虽然加入集群,但是这个集群中没有任何槽位

3.重新分派槽号

//命令 redis-cli -a 111111 --cluster reshard 127.0.0.1:6381

在这里插入图片描述 执行命令后会询问你要移到多少个槽位 16384/4 =4096

在这里插入图片描述 然后还需要我们确认将这4086个槽位分配到那个master,但是是我们刚加入的master6397,查询下6397的ID 复制过来,接续按下面提示操作就好。

在这里插入图片描述 由上图可以看到,新节点的槽位是由 其他3个master中分别均出1364个槽位得来的。这样原来的3个master剩下的槽位没有改变,所以最大减少了扩容时槽位移动问题。

4.为主节点6378分配从节点6379

redis-cli -cluster add-node ip:新slave端口 ip:新master端口 --cluster-slave --cluster-master-id 新主机节点id rediscluster 缩容

先清除从节点6398 redis-cli -a 111111 --cluster check 127.0.0.1:6398,记录从节点 ID 从集群中将6398从节点删除 redis-cli -a 111111 --cluster del-node 127.0.0.1:6398 6398从节点ID

清出来的槽号从新分配给6381(也可以重新分配到6392,6393等多个节点,就是要分配多次) redis-cli -a 111111 --cluster reshared 127.0.0.1:6391 按提示输入分配的源头(6397的nodeId),分配的槽位数

再删除主节点 6397 redis-cli -a 111111 --cluster del-node 127.0.0.1:6397 ,6397主节点ID

恢复成3主3从

rediscluster 其他补充

不同redis实例下槽位多键操作支持不好,这个时候占位符登场。 不在同一个reids实例的槽位,无法通过mget,mset等批处理命令。可以通过{}来定义同一组的概念。使key中{}相同内容的键值放到同一个实例的槽位中去。 比如 mset k1{x} v1 k2{x} v2 k3{x} v3,mget k1{x} v1 k2{x} v2 k3{x} v3

cluster-require-full-converage 有个问题,redis-cluster集群有3主3从结构,如果一台down机,数据还可不可以写入? 答案:如果一台主机切从机down机后,集群显示不可用状态。 如果cluster-require-full-converage配置成no的时候,表示一个主机及从机下线,集群仍然可用。

cluster countkeysinslot 槽位号 : 查看这个槽位是否被占用

cluster keyslot 键名称(k1):该键落在那个槽位



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有